/**
 * 创建数据表(测试用)
 * @param {String} modelName 模型名称
 * @param {Object} options 选项
 * User.sync() - 如果表不存在,则创建该表(如果已经存在,则不执行任何操作)
 * User.sync({ force: true }) - 将创建表,如果表已经存在,则将其首先删除
 * User.sync({ alter: true }) - 这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),
 * 然后在表中进行必要的更改以使其与模型匹配.
 */
module.exports.createTable = async (modelName, options) => modelName.sync(options);
/**
 * 删除数据表
 * @param {Object} modelName  模型名称
 * @returns
 */
module.exports.dropTable = async modelName => modelName.drop();

/**
 * 创建对象数据
 * @param {Object} modelName  模型名称
 * @param {Object} obj        数据对象
 * @returns
 */
module.exports.create = async (modelName, obj) => modelName.create(obj);

/**
 * 获取一条数据
 * @param {Object} modelName  模型名称
 * @param {Object} conditions 条件集合
 * @returns
 */
module.exports.findOne = async (modelName, conditions) => modelName.findOne(conditions);

/**
 * 获取所有数据
 * @param {Object} modelName  模型名称
 * @param {Object} conditions 条件集合(可选择某些特定参数attributes)
 * @returns
 * {attributes: ['foo', 'bar']}
 */
module.exports.findAll = async (modelName, conditions) => modelName.findAll(conditions);

/**
 * 处理分页
 * @param {Object} modelName  模型名称
 * @param {Object} conditions 条件集合
 * @returns
 * conditions: {
 *   where: {
 *     user_name: {
 *       [Op.like]: 'foo%'
 *     }
 *   },
 *   offset: 10,
 *   limit: 2
 * }
 */
module.exports.findAndCountAll = async (modelName, conditions) => modelName.findAndCountAll(conditions);

/**
 * 修改一条数据
 * @param {Object} modelName  模型名称
 * @param {Object} obj        数据对象
 * @returns
 * 例如：obj = {
 *        fields: {
 *          name: '123',
 *          age: '25'
 *        },
 *        conditions: {
 *          where: {
 *            user_id: 1
 *          }
 *        }
 *      }
 */
module.exports.update = async (modelName, obj) => modelName.update(obj.fields, obj.conditions);

/**
 * 删除数据
 * @param {Object} modelName  模型名称
 * @param {Object} conditions 条件集合
 * @returns
 */
module.exports.destroy = async (modelName, conditions) => modelName.destroy(conditions);
